package org.wdcode.base.interfaces.service.impl;

import java.util.List;

import org.wdcode.base.bean.PageBean;
import org.wdcode.base.interfaces.dao.Dao;
import org.wdcode.base.interfaces.service.Service;
import org.wdcode.common.util.CommonUtil;

/**
 * 使用通用Dao实现的通用业务接口抽象实现
 * @author WD
 * @since JDK6
 * @version 1.0 2009-09-23
 */
public abstract class BaseDaoService<D extends Dao<E>, E> implements Service<E> {
	// 通用Dao
	private D	dao;

	/**
	 * 根据ID 获得实体
	 * @param id ID
	 * @return 实体
	 */
	public E get(int id) {
		return dao.get(id);
	}

	/**
	 * 根据传入的条件，返回唯一的实体 如果有多个返回第一个实体
	 * @param entity 实体
	 * @return 实体
	 */
	public E get(E entity) {
		return dao.get(entity);
	}

	/**
	 * 查询全部
	 * @return 全部实体
	 */
	public List<E> queryByAll() {
		return dao.queryByAll();
	}

	/**
	 * 分页查询
	 * @param entity 实体
	 * @param page 分页Bean
	 * @return 列表
	 */
	public List<E> queryByPage(E entity, PageBean page) {
		return dao.queryByPage(entity, page);
	}

	/**
	 * 根据实体条件查询
	 * @param entity 实体
	 * @param page 分页Bean
	 * @return 列表
	 */
	public List<E> queryByEntity(E entity) {
		return dao.queryByEntity(entity);
	}

	/**
	 * 添加
	 * @param entity 实体
	 * @return ID
	 */
	public int insert(E entity) {
		return dao.insert(entity);
	}

	/**
	 * 添加
	 * @param entity 实体
	 * @return ID
	 */
	public int insert(List<E> list) {
		return dao.insert(list);
	}

	/**
	 * 更新
	 * @param entity 实体
	 * @return 影响的行数
	 */
	public boolean update(E entity) {
		return dao.update(entity) > 0 ? true : false;
	}

	/**
	 * 更新
	 * @param list 实体列表
	 * @return 是否成功
	 */
	public boolean update(List<E> list) {
		return dao.update(list) > 0 ? true : false;
	}

	/**
	 * 删除
	 * @param entity 实体
	 * @return 是否成功
	 */
	public boolean delete(E entity) {
		return dao.delete(entity) > 0 ? true : false;
	}

	/**
	 * 删除
	 * @param list 实体列表
	 * @return 是否成功
	 */
	public boolean delete(List<E> list) {
		return dao.delete(list) > 0 ? true : false;
	}

	/**
	 * 根据ID删除 完全删除
	 * @param id ID
	 * @return 是否成功
	 */
	public boolean delete(int id) {
		return !CommonUtil.isEmpty(dao.delete(id));
	}

	/**
	 * 根据ID数组删除 完全删除
	 * @param ids ID数组
	 * @return 是否成功
	 */
	public boolean delete(int[] ids) {
		return !CommonUtil.isEmpty(dao.delete(ids));
	}

	/**
	 * 获得通用Dao
	 * @return 通用Dao
	 */
	public D getDao() {
		return dao;
	}

	/**
	 * 设置通用Dao
	 * @param dao 通用Dao
	 */
	public void setDao(D dao) {
		this.dao = dao;
	}
}
